/**
 * 
 */
package com.google.code.cana.service;

import java.util.Date;
import java.util.List;

import org.apache.commons.validator.GenericValidator;

import com.google.code.cana.db.ClienteDao;
import com.google.code.cana.pojo.pessoas.Cliente;

/**
 * Implementacao para interface de Servico de Cliente
 * 
 * @author Samuel de Barros Florentino
 * @author Rodrigo Barbosa Lira
 * 
 */
public class ClienteServiceImpl implements ClienteService {

	private ClienteDao clienteDao;

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.google.code.cana.service.ClienteService#apagar(java.lang.Integer)
	 */
	public Cliente apagar(Integer clienteId) {
		return clienteDao.apagar(recuperarPorId(clienteId));
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.google.code.cana.service.ClienteService#apagarTodos()
	 */
	public void apagarTodos() {
		clienteDao.apagarTodos();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.google.code.cana.service.ClienteService#criar(com.google.code.cana.pojo.pessoas.Cliente)
	 */
	public Integer criar(Cliente cliente) {
		validar(cliente);
		
		cliente.setDataCadastro(new Date(System.currentTimeMillis()));
		clienteDao.criar(cliente);
		return cliente.getClienteId();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.google.code.cana.service.ClienteService#modificar(com.google.code.cana.pojo.pessoas.Cliente)
	 */
	public void modificar(Cliente cliente) {
		validar(cliente);
		
		clienteDao.modificar(cliente);
	}

	private void validar(Cliente cliente) {
		if (GenericValidator.isBlankOrNull(cliente.getNome())) {
			throw new RestricaoIntegridadeException("Dados incompletos");
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.google.code.cana.service.ClienteService#recuperarPorId(java.lang.Integer)
	 */
	public Cliente recuperarPorId(Integer clienteId) {

		return clienteDao.recuperarPorId(clienteId, false);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.google.code.cana.service.ClienteService#recuperarTodos()
	 */
	public List<Cliente> recuperarTodos() {

		return clienteDao.recuperarTodos();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.google.code.cana.service.ClienteService#setClienteDao(com.google.code.cana.db.ClienteDao)
	 */
	public void setClienteDao(ClienteDao clienteDao) {
		this.clienteDao = clienteDao;

	}

}
